home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 January / PCWorld_2007-01_cd.bin / v cisle / autoit / autoit-v3.2.0.1-setup.exe / Examples / Helpfile / TCPRecv.au3 < prev    next >
Text File  |  2006-06-17  |  3KB  |  92 lines

  1. ;SERVER!! Start Me First !!!!!!!!!!!!!!!
  2. #include <GUIConstants.au3>
  3.  
  4. ; Set Some reusable info
  5. ; Set your Public IP address (@IPAddress1) here.
  6. Dim $szIPADDRESS = @IPAddress1
  7. Dim $nPORT = 33891
  8.  
  9.  
  10. ; Start The TCP Services
  11. ;==============================================
  12. TCPStartUp()
  13.  
  14. ; Create a Listening "SOCKET".
  15. ;   Using your IP Address and Port 33891.
  16. ;==============================================
  17. $MainSocket = TCPListen($szIPADDRESS, $nPORT)
  18.  
  19. ; If the Socket creation fails, exit.
  20. If $MainSocket = -1 Then Exit
  21.  
  22.  
  23. ; Create a GUI for messages
  24. ;==============================================
  25. Dim $GOOEY = GUICreate("My Server (IP: " & $szIPADDRESS & ")",300,200)
  26. Dim $edit = GUICtrlCreateEdit("",10,10,280,180)
  27. GUISetState()
  28.  
  29.  
  30. ; Initialize a variable to represent a connection
  31. ;==============================================
  32. Dim $ConnectedSocket = -1
  33.  
  34.  
  35. ;Wait for and Accept a connection
  36. ;==============================================
  37. Do
  38.     $ConnectedSocket = TCPAccept($MainSocket)
  39. Until $ConnectedSocket <> -1
  40.  
  41.  
  42. ; Get IP of client connecting
  43. Dim $szIP_Accepted = SocketToIP($ConnectedSocket)
  44.  
  45. Dim $msg, $recv
  46. ; GUI Message Loop
  47. ;==============================================
  48. While 1
  49.    $msg = GUIGetMsg()
  50.  
  51. ; GUI Closed
  52. ;--------------------
  53.     If $msg = $GUI_EVENT_CLOSE Then ExitLoop
  54.  
  55. ; Try to receive (up to) 2048 bytes
  56. ;----------------------------------------------------------------
  57.     $recv = TCPRecv( $ConnectedSocket, 2048 )
  58.     
  59. ; If the receive failed with @error then the socket has disconnected
  60. ;----------------------------------------------------------------
  61.     If @error Then ExitLoop
  62.  
  63. ; Update the edit control with what we have received
  64. ;----------------------------------------------------------------
  65.     If $recv <> "" Then GUICtrlSetData($edit, _
  66.             $szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
  67. WEnd
  68.  
  69.  
  70. If $ConnectedSocket <> -1 Then TCPCloseSocket( $ConnectedSocket )
  71.  
  72. TCPShutDown()
  73.  
  74.  
  75. ; Function to return IP Address from a connected socket.
  76. ;----------------------------------------------------------------------
  77. Func SocketToIP($SHOCKET)
  78.     Local $sockaddr = DLLStructCreate("short;ushort;uint;char[8]")
  79.  
  80.     Local $aRet = DLLCall("Ws2_32.dll","int","getpeername","int",$SHOCKET, _
  81.             "ptr",DLLStructGetPtr($sockaddr),"int_ptr",DLLStructGetSize($sockaddr))
  82.     If Not @error And $aRet[0] = 0 Then
  83.         $aRet = DLLCall("Ws2_32.dll","str","inet_ntoa","int",DLLStructGetData($sockaddr,3))
  84.         If Not @error Then $aRet = $aRet[0]
  85.     Else
  86.         $aRet = 0
  87.     EndIf
  88.  
  89.     $sockaddr = 0
  90.  
  91.     Return $aRet
  92. EndFunc